home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / telecomm / bbs / getid211.lha / Doors / GetID / GetID.rexx < prev    next >
OS/2 REXX Batch file  |  1994-10-28  |  6KB  |  212 lines

  1. /***************************************************************************
  2. **                                                                          **
  3. ** $VER: GetID.rexx 2.11 (28.10.94)                                          **
  4. ** Public domain by Lauri Aalto <kilroy@fipnet.fi>                          **
  5. ** See documentation for details                                          **
  6. **                                                                          **
  7. ** tab size = 4                                                              **
  8. **                                                                          **
  9. ***************************************************************************/
  10.  
  11. parse arg ln ' ' file
  12. diz = 'file_id.diz'
  13. xdiz = '~(' || diz || ')'
  14.  
  15. /** CONFIG ****************************************************************/
  16.  
  17. /*    Temporary directory for descriptions and virus checking.
  18.     Set this to a fast device, eg. RAM: if you have lots of it.
  19.     All other files in this directory will get deleted! */
  20. TempDir = "SYS:T/GetID_" || ln
  21.  
  22. /*    Virus checker launching command.
  23.     Set to "" to disable checking. */
  24. VirusChecker = ""
  25. /*    VirusChecker = "Virus_Checker >>BBS:Logs/Virus.log stdout" TempDir */
  26.  
  27. /*    Set to 1 to make unsupported archive formats to fail. */
  28. FailUnsupported = 1
  29.  
  30. /*    A list of files to delete from LhA/Zip packets, "" for no deleting.
  31.     Edit the list to suit your needs... */
  32. LhaDeleteList = "BBS:Doors/GetID/Unwanted.files"
  33. ZipDeleteList = ""
  34.  
  35. /*    Character converter launch command, "" no for no conversion. */
  36. LhaConv = ""
  37. ZipConv = "port p" addpart(TempDir, diz)
  38. ArjConv = "port p" addpart(TempDir, diz)
  39. DmsConv = ""
  40.  
  41. /** END OF CONFIG *********************************************************/
  42.  
  43. CR = D2C(13)
  44. LF = D2C(10)
  45. CRLF = CR || LF
  46. ESC = D2C(27)
  47. WHITE = ESC || "[0m"
  48. RED = ESC || "[31m"
  49. GREEN = ESC || "[32m"
  50. YELLOW = ESC || "[33m"
  51. BLUE = ESC || "[34m"
  52. PURPLE = ESC || "[35m"
  53. CYAN = ESC || "[36m"
  54. CLEAR = D2C(12)
  55.  
  56. LineName = Con_LineActive(ln)
  57. if LineName = "" then exit 10
  58. address value LineName
  59.  
  60. SendModem CRLF || CRLF || "GetID v2.1 by Lauri Aalto" || CRLF
  61. SetStatus "Checking uploaded files"
  62.  
  63. address command 'makedir' TempDir
  64. if ~exists(TempDir) then do
  65.     LogEntry "Couldn't create temporary directory"
  66.     SendModem RED || "*** Couldn't create temporary directory" || WHITE || CRLF || CRLF
  67.     exit FailUnsupported
  68. end
  69.  
  70. /* Absolute path used to prevent some lousy shells junking this */
  71. address command 'c:list >' || addpart(TempDir, 'name' || ln) file 'lformat "%f%n*n%n"'
  72. if ~open('tempfile', addpart(TempDir, 'name' || ln), 'r') then exit 20
  73. filename = readln('tempfile')
  74. file = readln('tempfile')
  75. call close 'tempfile'
  76.  
  77. address command 'setdate' filename 'today 00:00:00'
  78.  
  79. olddir = pragma('d', TempDir)
  80. address command 'delete #? all'
  81.  
  82. LogEntry 'Checking' file
  83.  
  84. if ~open('arc', filename, 'r') then do
  85.     LogEntry "Couldn't open" file
  86.     exit 10
  87. end
  88. buff = readch('arc', 48)
  89. call close 'arc'
  90.  
  91. SendModem GREEN || 'Testing...' WHITE || CRLF
  92.  
  93. select
  94.  
  95.     /* .(lha|lzh|run) ? */
  96.     when (substr(buff, 3, 3) == '-lh') | (substr(buff, 45, 4) == 'SFX!') then do
  97.         address command '_lha >TECHIO:' || ln 't' filename
  98.         if RC ~= 0 then exit 10
  99.         if LhaDeleteList ~= "" then do
  100.             SendModem GREEN || "Removing unwanted files..." || WHITE
  101.             address command 'lha -i' || LhaDeleteList 'd' filename
  102.             SendModem CRLF
  103.         end
  104.         if VirusChecker = "" then address command 'lha x' filename diz
  105.         else do
  106.             SendModem GREEN || "Checking for viruses..." || WHITE
  107.             address command 'lha -mM e' filename
  108.             address command VirusChecker
  109.             address command 'delete' xdiz 'all'
  110.             SendModem CRLF
  111.         end
  112.         if LhaConv ~= "" & exists(diz) then address command LhaConv
  113.     end
  114.  
  115.     /* .zip ? */
  116.     when left(buff, 2) == 'PK' then do
  117.         address command 'zip >TECHIO:' || ln '-vT' filename
  118.         if RC ~= 0 then exit 10
  119.         if ZipDeleteList ~= "" then do
  120.             SendModem GREEN || "Removing unwanted files..." || WHITE
  121.             if open(file, ZipDeleteList, 'r') then do
  122.                 list = ""
  123.                 do while ~eof(file)
  124.                     list = list compress(readln(file))
  125.                 end
  126.                 call close file
  127.             end
  128.             address command 'zip -d' filename || list
  129.             drop list
  130.             SendModem CRLF
  131.         end
  132.         if VirusChecker = "" then address command 'unzip' filename diz
  133.         else do
  134.             SendModem GREEN || "Checking for viruses..." || WHITE
  135.             address command 'unzip' filename
  136.             address command VirusChecker
  137.             address command 'delete' xdiz 'all'
  138.             SendModem CRLF
  139.         end
  140.         if ZipConv ~= "" & exists(diz) then address command ZipConv
  141.     end
  142.  
  143.     /* .arj ? */
  144.     when left(buff, 2) == '60'x || 'ea'x then do
  145.         address command 'unarj >TECHIO:' || ln 't' filename
  146.         if RC ~= 0 then exit 10
  147.         SendModem GREEN || "Arj files take a bit longer to extract so be patient" || WHITE || CRLF
  148.         address command 'unarj x' filename
  149.         if VirusChecker ~= "" then do
  150.             SendModem GREEN || "Checking for viruses..." || WHITE
  151.             address command VirusChecker
  152.             SendModem CRLF
  153.         end
  154.         address command 'delete' xdiz 'all'
  155.         if ArjConv ~= "" & exists(diz) then address command ArjConv
  156.     end
  157.  
  158.     /* .dms ? */
  159.     when left(buff, 4) == 'DMS!' then do
  160.         address command 'mapus >TECHIO:' || ln '-crkR' filename
  161.         if RC ~= 0 then exit 10
  162.         address command 'dms viewdiz' filename 'save' diz
  163.         if DmsConv ~= "" & exists(diz) then address command DmsConv
  164.     end
  165.  
  166.     /* .(gz|z|Z) ? */
  167.     when (left(buff, 2) == '1f'x || '8b'x) | (left(buff, 2) == '1f'x || '9d'x) then do
  168.         address command 'gzip -tv' filename
  169.         if RC ~= 0 then exit 10
  170.     end
  171.  
  172.     otherwise do
  173.         LogEntry 'Unsupported archive format:' file
  174.         SendModem CRLF || RED || file 'is not of one of the supported archive formats!' || CRLF || 'Supported formats: *.(lha|lzh|run|zip|gz|z|Z|arj|dms)' || WHITE || CRLF || CRLF
  175.         exit FailUnsupported
  176.     end
  177. end
  178.  
  179. if open('dizfile', diz, 'r') then do
  180.     SendModem CLEAR || GREEN || 'Found a' diz 'from' file || ':' || WHITE || CRLF || CRLF
  181.     address command 'type' diz 'to TECHIO:' || ln
  182.     if GetYesNo(ln, CRLF || 'Do you want to keep this? ', 1) then do
  183.         if open('descfile', filename || '.desc', 'w') then do
  184.             do until eof('dizfile')
  185.                 line = trim(translate(readln('dizfile'), ' ', '0d'x))
  186.                 if line ~= "" then do
  187.                     call writeln 'descfile', trim(left(line, 45))
  188.                     LogEntry '>' line
  189.                 end
  190.             end
  191.             call close 'descfile'
  192.         end
  193.     end
  194.     else LogEntry 'Discarding diz'
  195.     call close 'dizfile'
  196. end
  197.  
  198. call pragma 'd', olddir
  199. address command 'delete' TempDir 'all'
  200.  
  201. SendModem WHITE || CRLF
  202. exit 0
  203.  
  204. addpart:
  205.     front = arg(1)
  206.     rear  = arg(2)
  207.  
  208.     char = right(front, 1)
  209.  
  210.     if char ~= "/" & char ~= ":" then return front || "/" || rear
  211. return front || rear
  212.